<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"  
    xmlns:h="http://java.sun.com/jsf/html"  
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:p="http://primefaces.org/ui"
    template="/plantillas/plantilla-sistema.xhtml">  
    
    <f:metadata>
        <f:event type="preRenderView" listener="#{privilegioBean.validarAcceso}"/>
    </f:metadata>
    
    <ui:define name="cabecera">  
        <title>Gestión de Privilegios</title>
        <link rel="shortcut icon"  
              href="/resources/imagenes/favicon.ico" />
    </ui:define>
    
    <ui:define name="contenido">
        <center> 
            <!-- Tabla de privilegios -->
            <p:panel header="Listado de Privilegios" styleClass="contenido">
                <h:form id="tablaPrivilegioFrm"> 
                    
                    <p:dataTable 
                        id="tablaPrivilegioDtb"
                        value="#{privilegioBean.listaEntidades}"
                        filteredValue="#{privilegioBean.listaEntidadesFiltradas}"
                        var="privilegio" 
                        selectionMode="single"
                        rowKey="#{privilegio.codigoprivilegio}"
                        emptyMessage="No hay registros disponibles."
                        paginator="true" 
                        paginatorPosition="bottom" 
                        rows="10"
                        resizableColumns="true">
                        
                        <p:column 
                            headerText="Privilegio"
                            styleClass="columna"
                            sortBy="#{privilegio.nombre}"
                            filterBy="#{privilegio.nombre}"
                            filterMatchMode="contains">
                            <h:outputText value="#{privilegio.nombre}"  />
                        </p:column>                       
                        
                        <p:column 
                            headerText="Descripción"
                            styleClass="columna"
                            sortBy="#{privilegio.descripcion}"
                            filterBy="#{privilegio.descripcion}"
                            filterMatchMode="contains">
                            <h:outputText value="#{privilegio.descripcion}"  />
                        </p:column>
                        
                        <p:column 
                            headerText="Operación"
                            styleClass="columna"
                            filterBy="#{privilegio.operacion.nombre}"
                            filterOptions="#{privilegioBean.itemsOperacion}">
                            <h:outputText value="#{privilegio.operacion.nombre}"  />
                        </p:column>
                        
                        <p:column 
                            headerText="Objeto"
                            styleClass="columna"
                            filterBy="#{privilegio.objeto.nombre}"
                            filterOptions="#{privilegioBean.itemsObjeto}">
                            <h:outputText value="#{privilegio.objeto.nombre}"  />
                        </p:column>
                        
                        <p:column 
                            headerText="Bloqueado"
                            filterBy="#{privilegio.bloqueado ? 'Si' : 'No'}"
                            filterOptions="#{privilegioBean.itemsBloqueado}"
                            styleClass="columna">
                            <h:outputText value="#{privilegio.bloqueado ? 'Si' : 'No'}"  />
                        </p:column>
                        
                        <p:column 
                            headerText="Modificar" 
                            styleClass="columna"> 
                                <p:commandButton 
                                    id="modificarBtn" 
                                    title="Modificar" 
                                    icon="ui-icon-pencil"
                                    actionListener="#{privilegioBean.prepararModificacion(privilegio)}"
                                    update=":guardarPrivilegioFrm" 
                                    oncomplete="guardarPrivilegioWgt.show()" 
                                    rendered="#{sesionBean.verificarPermiso('modificar','privilegio')}">
                                    <f:setPropertyActionListener 
                                        target="#{privilegioBean.operacionActual}" 
                                        value="ACTUALIZACION" />
                                </p:commandButton>
                        </p:column>
                        
                        <p:column 
                            headerText="Eliminar" 
                            styleClass="columna">
                                <p:commandButton 
                                    id="eliminarBtn" 
                                    title="Eliminar" 
                                    icon="ui-icon-trash"
                                    actionListener="#{privilegioBean.prepararEliminacion(privilegio)}"
                                    update="@form" 
                                    oncomplete="confirmacionWgt.show()" 
                                    rendered="#{sesionBean.verificarPermiso('eliminar','privilegio')}">
                                    <f:setPropertyActionListener 
                                        target="#{privilegioBean.operacionActual}" 
                                        value="ELIMINACION" />
                                </p:commandButton>
                        </p:column>                     
                        
                        <f:facet name="footer">
                            <p:commandButton 
                                value="Nuevo Privilegio"
                                title="Agregar un nuevo privilegio"
                                actionListener="#{privilegioBean.prepararAdicion}" 
                                update=":guardarPrivilegioFrm" 
                                oncomplete="guardarPrivilegioWgt.show()"
                                style="float:left; font-size: 110%" 
                                rendered="#{sesionBean.verificarPermiso('agregar','privilegio')}">
                                <f:setPropertyActionListener 
                                    target="#{privilegioBean.operacionActual}" 
                                    value="INSERCION" />
                            </p:commandButton>
                        </f:facet>
                        
                    </p:dataTable>
                    
                </h:form>
            </p:panel>
         </center>      
    </ui:define>    
    
    <ui:define name="extra">       
        <!-- Diálogo de inserción/modificación de privilegio -->
        <p:dialog 
            id="guardarPrivilegioDlg" 
            widgetVar="guardarPrivilegioWgt"
            header="Datos del Privilegio"   
            modal="true" 
            resizable="false" 
            closable="false"
            draggable="false"
            width="300"
            style="font-size: 85%"
            rendered="#{sesionBean.verificarPermiso('agregar','privilegio') or
                        sesionBean.verificarPermiso('modificar','privilegio')}">
            <h:form id="guardarPrivilegioFrm">               
                <p:messages id="mensajesMsg" globalOnly="true" />
                <h:panelGrid 
                    columns="3" 
                    style="margin-top:20px; margin-bottom:20px; font-size: 85%">  
                    
                    <h:outputLabel 
                        for="nombreTxt" 
                        value="Nombre del privilegio: "/>
                    <p:inputText 
                        id="nombreTxt" 
                        value="#{privilegioBean.entidad.nombre}">
                        <f:attribute 
                            name="regex" 
                            value="#{regex.nombre}" />
                        <f:validator 
                            validatorId="regexValidator" />
                    </p:inputText>
                    <p:panel 
                        style="border:none; font-size: 85%">
                        <p:tooltip 
                            for="nombreTxt" 
                            showEvent="mouseover" 
                            hideEvent="mouseout" 
                            rendered="#{privilegioBean.tieneErrores('guardarPrivilegioFrm:nombreTxt')}">
                            <p:message 
                                id="nombreMsg" 
                                for="nombreTxt"
                                display="text" />
                        </p:tooltip>
                    </p:panel>   
                    
                    <p:column>
                        <h:outputLabel 
                            for="descripcionTxa" 
                            value="Descripción: "/>
                        <br/>
                        <h:outputText 
                            id="descripcioncontador" 
                            style="font-size: 80%"/>
                    </p:column>
                    <p:inputTextarea 
                        id="descripcionTxa" 
                        value="#{privilegioBean.entidad.descripcion}"
                        required="true"
                        maxlength="500"
                        counter="descripcioncontador"
                        counterTemplate="Restan {0} caracteres."
                        autoResize="false" />
                    <p:panel 
                        style="border:none; font-size: 85%">
                        <p:tooltip 
                            for="descripcionTxa" 
                            showEvent="mouseover" 
                            hideEvent="mouseout" 
                            rendered="#{privilegioBean.tieneErrores('guardarPrivilegioFrm:descripcionTxa')}">
                            <p:message 
                                id="descripcionMsg" 
                                for="descripcionTxa"
                                display="text" />
                        </p:tooltip>
                    </p:panel>       
                    
                    <h:outputLabel 
                        for="operacionCmb" 
                        value="Operación: " />
                    <p:selectOneMenu 
                        id="operacionCmb" 
                        value="#{privilegioBean.entidad.operacion}" 
                        filter="true"
                        required="true"
                        filterMatchMode="contains"
                        requiredMessage="#{msgvld.requerido}">
                        <f:selectItem 
                            itemLabel="Seleccione..." 
                            itemValue="" />
                        <f:selectItems 
                            value="#{privilegioBean.listaOperacion}" />
                        <f:converter 
                            converterId="operacionConverter" />                        
                    </p:selectOneMenu>
                    <p:panel style="border:none; font-size: 85%">
                        <p:tooltip 
                            for="operacionCmb" 
                            showEvent="mouseover" 
                            hideEvent="mouseout" 
                            rendered="#{privilegioBean.tieneErrores('guardarPrivilegioFrm:operacionCmb')}">
                            <p:message 
                                id="operacionMsg" 
                                for="operacionCmb"
                                display="text" />
                        </p:tooltip>
                    </p:panel>                    
                    <h:outputLabel 
                        for="objetoCmb" 
                        value="Objeto: " />
                    <p:selectOneMenu 
                        id="objetoCmb" 
                        value="#{privilegioBean.entidad.objeto}" 
                        filter="true"
                        required="true"
                        filterMatchMode="contains"
                        requiredMessage="#{msgvld.requerido}">
                        <f:selectItem 
                            itemLabel="Seleccione..." 
                            itemValue="" />
                        <f:selectItems 
                            value="#{privilegioBean.listaObjeto}" />
                        <f:converter 
                            converterId="objetoConverter" />                        
                    </p:selectOneMenu>
                    <p:panel style="border:none; font-size: 85%">
                        <p:tooltip 
                            for="objetoCmb" 
                            showEvent="mouseover" 
                            hideEvent="mouseout" 
                            rendered="#{privilegioBean.tieneErrores('guardarPrivilegioFrm:objetoCmb')}">
                            <p:message 
                                id="objetoMsg" 
                                for="objetoCmb"
                                display="text" />
                        </p:tooltip>
                    </p:panel>         
                    
                    <h:outputLabel for="bloqueadoTxt" 
                                   value="Bloqueado: " 
                                   rendered="#{privilegioBean.operacionActual == 'ACTUALIZACION'}"/>
                    <p:selectBooleanCheckbox
                        id="bloqueadoTxt"
                        value="#{privilegioBean.entidad.bloqueado}" 
                        rendered="#{privilegioBean.operacionActual == 'ACTUALIZACION'}"/>
                    <p:panel style="border:none; font-size: 85%"
                             rendered="#{privilegioBean.operacionActual == 'ACTUALIZACION'}">
                        <p:tooltip for="bloqueadoTxt" 
                                   showEvent="focus" 
                                   hideEvent="blur" 
                                   rendered="#{privilegioBean.tieneErrores('guardarPrivilegioFrm:bloqueadoTxt')}">
                            <p:message id="bloqueadoMsg" 
                                       for="bloqueadoTxt"
                                       display="text" />
                        </p:tooltip>
                    </p:panel> 
                    
                </h:panelGrid> 
                <p:separator />
                <br/>
                <p:commandButton 
                    value="Guardar"
                    title="Guardar los datos"
                    actionListener="#{privilegioBean.guardarEntidad}"
                    update="@form,:tablaPrivilegioFrm:tablaPrivilegioDtb" 
                    icon="ui-icon-disk"
                    oncomplete="if ( !args.validationFailed ) 
                                guardarPrivilegioWgt.hide();" 
                    style="float:right; font-size: 85%" />              
                <p:commandButton 
                    value="Cancelar"
                    title="Cerrar la ventana"
                    icon="ui-icon-cancel"
                    immediate="true"
                    actionListener="#{privilegioBean.revertirCambios}"
                    onclick="guardarPrivilegioWgt.hide();" 
                    style="float:right; font-size: 85%"/>
            </h:form>
        </p:dialog>       
        <!-- Diálogo de confirmación de eliminación -->
        <p:confirmDialog 
            id="confirmacionDlg" 
            message="¿Está seguro que desea eliminar éste registro?" 
            header="Eliminar Privilegio" 
            widgetVar="confirmacionWgt" 
            severity="alert"
            width="300"
            closable="false"
            style="font-size: 85%"
            rendered="#{sesionBean.verificarPermiso('eliminar','privilegio')}">
            <h:form>
            <p:messages 
             id="mensajesMsg" 
             globalOnly="true" />
                <p:commandButton 
                    value="Eliminar"
                    title="Confirmar eliminación"
                    actionListener="#{privilegioBean.eliminarEntidad}"
                    update="@form,:tablaPrivilegioFrm:tablaPrivilegioDtb"
                    oncomplete="if ( !args.validationFailed ) confirmacionWgt.hide()"
                    style="float:right; font-size: 85%"
                    icon="ui-icon-trash"/>
                <p:commandButton value="Cancelar"
                                 update="@form"
                                oncomplete="confirmacionWgt.hide()" 
                                icon="ui-icon-cancel" 
                                title="Cancelar eliminación"
                                style="float:right; font-size: 85%">
                    <f:setPropertyActionListener 
                        target="#{privilegioBean.operacionActual}" 
                        value="NINGUNA" />
                </p:commandButton>
                </h:form>
        </p:confirmDialog>
    </ui:define>  
</ui:composition>
